home *** CD-ROM | disk | FTP | other *** search
- /******************************************************************************
- **
- ** Project Name: DropShell
- ** File Name: DropShell.c
- **
- ** Description: Main application code for the QuickShell
- **
- *******************************************************************************
- ** A U T H O R I D E N T I T Y
- *******************************************************************************
- **
- ** Initials Name
- ** -------- -----------------------------------------------
- ** LDR Leonard Rosenthol
- ** MTC Marshall Clow
- ** SCS Stephan Somogyi
- **
- *******************************************************************************
- ** R E V I S I O N H I S T O R Y
- *******************************************************************************
- **
- ** Date Author Description
- ** --------- ------ ---------------------------------------------
- ** 23 Jun 94 LDR Implemented support for disk insertion events
- ** 02 Feb 94 LDR Updated for Final SDK & CodeWarrior a2
- ** Removed the ResumeProc as per new Apple recommendations
- ** 11 Dec 93 SCS Universal Headers/UPPs (Phoenix 68k/PPC & PPCC)
- ** Skipped System 6 compatible rev of DropShell source
- ** 09 Dec 91 LDR Added support for new "Select File…" menu item
- ** Quit now sends AEVT to self to be politically correct
- ** Added support for the new gSplashScreen
- ** 24 Nov 91 LDR Added support for the Apple Menu (duh!)
- ** 29 Oct 91 SCS Changes for THINK C 5
- ** 28 Oct 91 LDR Officially renamed DropShell (from QuickShell)
- ** Added a bunch of comments for clarification
- ** 06 Oct 91 MTC Converted to MPW C
- ** 09 Apr 91 LDR Added to Projector
- **
- ******************************************************************************/
-
- #ifndef __MWERKS__
- #include <Desk.h>
- #include <Dialogs.h>
- #include <Errors.h>
- #include <Files.h>
- #include <Fonts.h>
- #include <Memory.h>
- #include <Menus.h>
- #include <StandardFile.h>
- #include <TextEdit.h>
- #include <Types.h>
- #include <Windows.h>
- #endif
-
- // #include <sioux.h>
-
- #include "DSGlobals.h"
- #include "DSUserProcs.h"
- #include "DSAppleEvents.h"
-
- #include "DropShell.h"
- #include "AsyncPrefsDialog.h"
-
-
-
- Boolean gDone, gOApped, gHasAppleEvents, gWasEvent;
- EventRecord gEvent;
- MenuHandle gAppleMenu, gFileMenu, gTestMenu;
- WindowPtr gSplashScreen;
-
- Boolean gModalDialogActive;
- DialogPtr gModalDialog;
-
- extern Str255 ResultStrings[5];
-
- #ifdef MPW
- extern void _DataInit();
- #endif
-
-
- #pragma segment Initialize
- void InitToolbox (void)
- {
-
- #ifdef MPW
- UnloadSeg ((Ptr) _DataInit );
- #endif
-
- InitGraf ( &qd.thePort );
- InitFonts ();
- InitWindows ();
- InitMenus ();
- TEInit ();
- InitDialogs (NULL); // use of ResumeProcs no longer approved by Apple
- InitCursor ();
- FlushEvents ( everyEvent, 0 );
-
- // how about some memory fun! Two should be enough!
- MoreMasters ();
- MoreMasters ();
- }
-
- /*
- Let's setup those global variables that the DropShell uses.
-
- If you add any globals for your own use,
- init them in the InitUserGlobals routine in DSUserProcs.c
- */
- #pragma segment Initialize
- Boolean InitGlobals (void)
- {
- long aLong;
-
- gDone = false;
- gOApped = false; // probably not since users are supposed to DROP things!
- gHasAppleEvents = Gestalt ( gestaltAppleEventsAttr, &aLong ) == noErr;
- gSplashScreen = NULL;
- gModalDialogActive = false;
- gModalDialog = NULL;
-
- return(InitUserGlobals()); // call the user proc
- }
-
- /*
- Again, nothing fancy. Just setting up the menus.
-
- If you add any menus to your DropBox - insert them here!
- */
- #pragma segment Initialize
- void SetUpMenus (void) {
-
- gAppleMenu = GetMenu ( kAppleNum );
- AddResMenu ( gAppleMenu, 'DRVR' );
- InsertMenu ( gAppleMenu, 0 );
-
- gFileMenu = GetMenu ( kFileNum );
- InsertMenu ( gFileMenu, 0 );
-
- // Added 2/23/96 RDC
- gTestMenu = GetMenu ( kTestNum );
- InsertMenu ( gTestMenu, 0 );
-
- DrawMenuBar ();
- }
-
- /*
- This routine is called during startup to display a splash screen.
-
- This was recommend by the Blue Team HI person, John Sullivan, who
- feels that all apps should display something so that users can easily
- tell what is running, and be able to switch by clicking. Thanks John!
- */
- #pragma segment Initialize
- void InstallSplashScreen(void)
- {
- gSplashScreen = GetNewWindow(128, NULL, (WindowPtr)-1L);
- }
-
-
- /* --------------- Standard Event Handling routines ---------------------- */
- #pragma segment Main
- void ShowAbout () {
- (void) Alert ( 128, NULL );
- }
-
-
- #pragma segment Main
- void DoMenu ( long retVal ) {
- short menuID, itemID;
- Str255 itemStr;
-
- menuID = HiWord ( retVal );
- itemID = LoWord ( retVal );
-
- switch ( menuID ) {
- case kAppleNum:
- if ( itemID == 1 )
- ShowAbout (); /* Show the about box */
- else
- {
- GetItem(GetMHandle(kAppleNum), itemID, itemStr);
- OpenDeskAcc(itemStr);
- }
- break;
-
- case kFileNum:
- if ( itemID == 1 )
- SelectFile(); // call file selection userProc
- else
- SendQuitToSelf(); // send self a 'quit' event
- break;
-
- case kTestNum:
- if ( itemID == 1 ) {
- gModalDialog = OpenThisDialog();
- if (gModalDialog != NULL)
- gModalDialogActive = true;
- }
- break;
-
- default:
- break;
-
- }
- HiliteMenu(0); // turn it off!
- }
-
-
- #pragma segment Main
- void DoMouseDown ( EventRecord *curEvent ) {
- WindowPtr whichWindow;
- short whichPart;
-
- whichPart = FindWindow ( curEvent->where, &whichWindow );
- switch ( whichPart ) {
- case inMenuBar:
- DoMenu ( MenuSelect ( curEvent->where ));
- break;
-
- case inSysWindow:
- SystemClick ( curEvent, whichWindow );
- break;
-
- case inDrag:
- {
- Rect boundsRect = (*GetGrayRgn())->rgnBBox;
- DragWindow ( whichWindow, curEvent->where, &boundsRect );
- }
- default:
- if (gModalDialogActive)
- DoDialogContent(gModalDialog, curEvent);
- break;
- }
- }
-
-
- #pragma segment Main
- void DoKeyDown ( EventRecord *curEvent ) {
- if ( curEvent->modifiers & cmdKey ) {
- DoMenu ( MenuKey ((char) curEvent->message & charCodeMask ));
- } else if (gModalDialogActive) {
- short itemHit;
- DialogPtr dlg;
- DialogSelect(curEvent, &dlg, &itemHit);
- }
- }
-
-
- #pragma segment Main
- void main ( )
- {
-
- InitToolbox ();
- if ( InitGlobals () ) { // if we succeeding in initting self
- if ( !gHasAppleEvents )
- ErrorAlert ( kErrStringID, kCantRunErr, 0 );
- else {
- InitAEVTStuff ();
- SetUpMenus ();
- InstallSplashScreen ();
-
- while ( !gDone ) {
- gWasEvent = WaitNextEvent ( everyEvent, &gEvent, 0, NULL );
- if ( gWasEvent) { // && !SIOUXHandleOneEvent(&gEvent)) {
- switch ( gEvent.what ) {
- case kHighLevelEvent:
- DoHighLevelEvent ( &gEvent );
- break;
-
- case mouseDown:
- DoMouseDown ( &gEvent );
- break;
-
- case keyDown:
- case autoKey:
- DoKeyDown ( &gEvent );
- break;
-
- case diskEvt:
- if (HiWord(gEvent.message)) {
- Point diskInitPt;
-
- diskInitPt.v = diskInitPt.h = 100;
- DILoad();
- DIBadMount(diskInitPt, gEvent.message);
- DIUnload();
- }
- break;
-
- case updateEvt:
- if (gModalDialogActive)
- DoDialogUpdate(gModalDialog);
- else {
- // Update our result window
- int count;
-
- BeginUpdate(gSplashScreen);
- SetPort(gSplashScreen);
- EraseRect(&(gSplashScreen->portRect));
- if (*ResultStrings[0] != '\0') {
- TextFace(0); TextFont(monaco); TextSize(10);
- for (count = 0; count < 5; count++) {
- MoveTo(3, 14 * (count + 1));
- DrawString(ResultStrings[count]);
- }
- } else {
- TextFace(bold); TextFont(monaco); TextSize(12);
- MoveTo(3, 14);
- DrawString("\pOpen a file to test read timings");
- }
- EndUpdate(gSplashScreen);
- }
- break;
-
- case activateEvt:
- if (gModalDialogActive)
- DoDialogActivate(gModalDialog, gEvent.modifiers & 0x0001);
- break;
-
- default:
- break;
- }
- }
- }
- }
- DisposeUserGlobals(); // call the userproc to clean itself up
- }
- }
-